import subprocess
import os
def trigger_media_scan(folder_path):
    """
    触发媒体扫描，将指定文件夹中的图片添加到媒体库。
    :param folder_path: 手机上的目标文件夹路径
    """
    try:
        subprocess.run(f"adb shell am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d file://{folder_path}", shell=True, check=True)
        print(f"已触发媒体扫描，图片已添加到媒体库：{folder_path}")
    except subprocess.CalledProcessError as e:
        print(f"触发媒体扫描失败：{e}")
def create_phone_folder(folder_name):
    """
    在手机相册中创建文件夹。
    :param folder_name: 文件夹名称
    :return: True（创建成功），False（创建失败），None（文件夹已存在）
    """
    try:
        # 检查文件夹是否已存在
        result = subprocess.run(f"adb shell ls /sdcard/DCIM/Camera/{folder_name}", shell=True, capture_output=True, text=True)
        if result.returncode == 0:
            print(f"文件夹已存在：/sdcard/DCIM/Camera/{folder_name}")
            return None  # 文件夹已存在，返回 None

        # 创建文件夹
        subprocess.run(f"adb shell mkdir -p /sdcard/DCIM/Camera/{folder_name}", shell=True, check=True)
        print(f"文件夹已创建：/sdcard/DCIM/Camera/{folder_name}")
        return True
    except subprocess.CalledProcessError as e:
        print(f"创建文件夹失败：{e}")
        return False

def transfer_images_to_phone(image_dir, folder_name):
    """
    将图片传输到手机相册的指定文件夹。
    :param image_dir: 图片目录路径
    :param folder_name: 手机相册中的目标文件夹名称
    :return: True（传输成功），False（传输失败或文件夹已存在）
    """
    try:
        # 检查文件夹是否已存在
        folder_status = create_phone_folder(folder_name)
        if folder_status is None:
            print(f"文件夹已存在，跳过传输：{folder_name}")
            return False  # 文件夹已存在，跳过传输
        elif not folder_status:
            return False  # 文件夹创建失败，跳过传输

        # 将图片传输到目标文件夹
        for image_file in os.listdir(image_dir):
            image_path = os.path.join(image_dir, image_file)
            subprocess.run(f"adb push {image_path} /sdcard/DCIM/Camera/{folder_name}/", shell=True, check=True)
            print(f"图片已传输到手机：/sdcard/DCIM/Camera/{folder_name}/{image_file}")
        # 触发媒体扫描，将图片添加到媒体库
        trigger_media_scan(f"/sdcard/DCIM/Camera/{folder_name}")
        return True
    except subprocess.CalledProcessError as e:
        print(f"传输图片失败：{e}")
        return False